package me.dengfengdecao.android.photogallery;

import android.graphics.Bitmap;
import android.support.v4.util.LruCache;
import android.util.Log;

/**
 * 缓存图片
 */
public class LrcCacheUtils {

    private static final String TAG = "LrcCacheUtils";

    private static LrcCacheUtils mLrcCacheUtils;
    private static LruCache<String, Bitmap> mMemoryCache;  // key：图片地址，value：图片
    private static int mMaxMemory;

    private LrcCacheUtils() {

    }

    public static LrcCacheUtils newInstance() {
        if (mLrcCacheUtils == null)
            mLrcCacheUtils = new LrcCacheUtils();

        mMaxMemory = (int) (Runtime.getRuntime().maxMemory()/1024);    //得到手机最大内存
        if (mMemoryCache == null) {
            mMemoryCache = new LruCache<String, Bitmap>(mMaxMemory/8) {
                // 在每次加入内存缓存时候调用
                protected int sizeOf(String key, Bitmap value) {
                    // 在每次存入缓存的时候给予bitmap准确的大小
                    return value.getWidth() * value.getHeight();
                }
            };
        }

        return mLrcCacheUtils;
    }

    // 添加图片到缓存
    public void addBitmapToMemoryCache(String picUrl, Bitmap bitmap) {
        if (mMemoryCache.get(picUrl) == null) {
            if (bitmap != null) {
                mMemoryCache.put(picUrl, bitmap);
                Log.d(TAG, "addBitmapToMemoryCache 正在将图片存入缓存中！");
            } else {
	            Log.d(TAG, "addBitmapToMemoryCache 图片为空！");
            }
        } else {
            Log.w(TAG, "addBitmapToMemoryCache 图片已存在缓存中！");
        }
    }

    // 从缓存中取得图片
    public Bitmap getBitmapFromMemoryCache(String picUrl) {
        if (mMemoryCache.get(picUrl) != null) {
            Log.d(TAG, "getBitmapFromMemoryCache 取得缓存中的图片！");
            return mMemoryCache.get(picUrl);
        } else {
            Log.w(TAG, "getBitmapFromMemoryCache 获取失败！当前缓存中没有对应图片！");
            return null;
        }
    }

    // 清空缓存
    public void cleerMemoryCache() {
        if (mMemoryCache != null) {
            if (mMemoryCache.size() > 0) {
                Log.w(TAG, "cleerMemoryCache 清空缓存前，缓存的大小：" + mMemoryCache.size());
                mMemoryCache.evictAll();
                Log.w(TAG, "cleerMemoryCache 清空缓存后，缓存的大小" + mMemoryCache.size());
            }
            mMemoryCache = null;
        }
    }

}
